package com.lm.hutooltest;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.map.MapUtil;
import com.lm.domain.User;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * @Auther: Min.Liu
 * @Description:
 * @Date: Created in 9:58 2024/9/26
 */
public class BeanUtilTest {
    public static void main(String[] args) {
        // 创建一个 Map，其中包含要填充到 User 对象的属性值
        Map<String, Object> map = new HashMap<>();
        map.put("username", "张三");
        map.put("age", 18);
        //转换为key为驼峰风格的map，非String类型 维持不变
        Map<String, Object> toCamelCaseMap = MapUtil.toCamelCaseMap(map);
        System.out.println(toCamelCaseMap);

        // 创建一个 User 对象
        User user = new User();

        CopyOptions options = new CopyOptions();
        // 使用 BeanUtil.fillBeanWithMap 方法填充 User 对象的属性
        BeanUtil.fillBeanWithMap(map,user,true);
        System.out.println(user);

        //使用 BeanUtil.beanToMap 方法将 User 对象转换为 Map
        //Map<String,Object> newUser = BeanUtil.beanToMap(user);
        //System.out.println(newUser);

        // 使用BeanUtil.copyProperties方法将 User 对象复制到另一个 User 对象
        //User user2 = new User();
        //BeanUtil.copyProperties(user, user2);
        //System.out.println(user2);

        //GivenIfDef(user,User::new);
        //GivenIfDef2(null,User::create2);
    }

    public static User GivenIfDef(User u1, Supplier<User> u2){
        return u1!=null?u1:u2.get();
    };

    public static User GivenIfDef2(User u1, Function<String,User> u2){
        return u1!=null?u1:u2.apply("使用function");
    };
}
/*
*加载类，通过传入类的字符串，返回其对应的参数。使用默认的初始化classloader（调用初始的static模块和可选的初始化shtaitc属性）
*扩展class.forname方法,支持以下几个类名的加载：
* 1.原始类型。例如：int
* 2.数组类型，例如：int[] long[] String[]
* 3.转义和反转义工具类Escape/Unescape，escape采用ISO Labin字符集对指定字符串进行编码。所有的空格符、标点符号、特殊字符
* 以及其他非SCAII字符都将被转化成%xx等格式的字符编码(xx等于该字符在字符编码集的16进制数字)
*
* 下午可以去看看 到底对方是怎么像的 好像有很多的人都觉得 不是很想去看看 那边的有好多的情况不是收一直 会这样的
* 收回来 在重新看看 可能会有不一样的结果 不过 他们都说 如果现在就把结果弄出来 应该就只是一个半成品 太多意外了 实在不是太保险的
* 都下半年 试运行一段时间之后 应该 能又更好的反馈  那个时候 应该 很轻松就 能完成今天整年的指标了
 */
